<?php

session_start();
require_once '../model/Usuario.php';
require_once '../model/Grupo.php';

class UsuarioDLO {

    private static $usuarioDLO;
    private $usuario_logado;
    private $usuarios;

    private function __construct() {

    }

    /**
     * @method UsuarioDLO getInstance() para obter uma única instância do controlador
     * @return UsuarioDLO
     */
    public static function getInstance() {
        if (!isset(self::$usuarioDLO)) {
            if (!isset($_SESSION['usuarioDLO'])) {
                $_SESSION['usuarioDLO'] = serialize(new UsuarioDLO());
            }
            self::$usuarioDLO = unserialize($_SESSION['usuarioDLO']);
        }
        return self::$usuarioDLO;
    }

    public function validar(&$usuario, &$senha) {
        $usuario = &Usuario::validarUsuario($usuario, $senha);
        $this->usuario_logado = &$usuario;
        $_SESSION['usuarioDLO'] = serialize($this);
    }

    public function alterar(&$cod_usuario, &$campo_id, &$campo_valor) {
        if (!isset($this->usuario_logado)) {
            throw new Exception('Usuário deve estar logado');
        }
        $usuario = $this->usuario_logado;
        $usuario->alterarCampo($campo_id, $campo_valor);
        $this->usuario_logado = $usuario;
        $_SESSION['usuarioDLO'] = serialize($this);
    }

    public function getCod_grupo() {
        //return $this->usuario->getGrupo()->getCod_grupo();
        return 1;
    }

    public function isLogado() {
        return (isset($this->usuario_logado));
    }

    public function consultar(&$cod_usuario) {
        $usuario = null;
        if (isset($this->usuarios[$cod_usuario])) {
            $usuario = &$this->usuarios[$cod_usuario];
        } else {
            $usuario = &Usuario::consultar($cod_usuario);
            $this->usuarios[$cod_usuario] = &$usuario;
            $_SESSION['grupoDLO'] = serialize($this);
        }
        $row = array();
        $row['codusuario'] = &$usuario->getCod_usuario();
        $row['login'] = &$usuario->getLogin();
        $row['nome'] = &$usuario->getNome();
        return $row;
    }

    public function cadastrarEspaco(&$cod_usuario, &$cod_espaco) {
        $usuario = null;
        if (isset($this->usuarios[$cod_usuario])) {
            $usuario = &$this->usuarios[$cod_usuario];
        } else {
            $usuario = &Usuario::consultar($cod_usuario);
            $this->usuarios[$cod_usuario] = &$usuario;
            $_SESSION['usuarioDLO'] = serialize($this);
        }
        $espaco = EspacoCultural::consultar($cod_espaco);
        $usuario->cadastrarEspaco($espaco);
        $this->usuarios[$cod_usuario] = &$usuario;
        $_SESSION['usuarioDLO'] = serialize($this);
    }

    public function excluirEspaco(&$cod_usuario, &$cod_espaco) {
        $usuario = null;
        if (isset($this->usuarios[$cod_usuario])) {
            $usuario = &$this->usuarios[$cod_usuario];
        } else {
            $usuario = &Usuario::consultar($cod_usuario);
            $this->usuarios[$cod_usuario] = &$usuario;
            $_SESSION['usuarioDLO'] = serialize($this);
        }
        $usuario->excluirEspaco($cod_espaco);
        $this->usuarios[$cod_usuario] = &$usuario;
        $_SESSION['usuarioDLO'] = serialize($this);
    }

    public function &listarEspacos(&$cod_usuario) {
        $usuario = null;
        if (isset($this->usuarios[$cod_usuario])) {
            $usuario = &$this->usuarios[$cod_usuario];
        } else {
            $usuario = &Usuario::consultar($cod_usuario);
            $this->usuarios[$cod_usuario] = &$usuario;
            $_SESSION['usuarioDLO'] = serialize($this);
        }
        $espacos = &$usuario->getEspacos();
        $resultEspacos = array();
        foreach ($espacos as $espaco) {
            $rowEspaco[] = array();
            $rowEspaco['cod_espaco'] = &$espaco->getCod_espaco();
            $rowEspaco['nome'] = &$espaco->getNome();
            $resultEspacos[] = &$rowEspaco;
            unset($rowEspaco);
        }
        return $resultEspacos;
    }

    /* public function listarPermissoes() {
      $grupo = &$this->usuario->consultarGrupo();
      $permissoes = &$grupo->listarPermissoes();
      $row = array();
      for ($i = 0; $i < sizeof($permissoes); $i++) {
      $rowPermissao[] = array();
      $rowPermissao['alteracao'] = &$permissoes[$i]->getAlteracao();
      $rowPermissao['consulta'] = &$permissoes[$i]->getConsulta();
      $rowPermissao['exclusao'] = &$permissoes[$i]->getExclusao();
      $rowPermissao['inclusao'] = &$permissoes[$i]->getInclusao();
      $recurso = &$permissoes[$i]->getRecurso();
      $row[$recurso->getDescricao()] = &$rowPermissao;
      unset ($rowPermissao);
      }
      return $row;
      } */
}
?>